package com.zzl.springboot_mybatis_demo.service.user.impl;

import com.gitee.yongzhuzl.commonutil.util.empty.EmptyUtil;
import com.gitee.yongzhuzl.commonutil.util.json.JsonTool;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.zzl.springboot_mybatis_demo.common.MyOwnerBean;
import com.zzl.springboot_mybatis_demo.entity.user.User;
import com.zzl.springboot_mybatis_demo.mapper.user.UserMapper;
import com.zzl.springboot_mybatis_demo.service.user.UserService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.lang.NonNull;
import org.springframework.lang.Nullable;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.List;

/**
 * Description：用户服务接口实现类
 * Created by 朱正磊 on 2019-06-16 16:43
 */
@Slf4j
@Service
public class UserServiceImpl implements UserService {

    @Resource
    private UserMapper userMapper;

    @Resource
    private MyOwnerBean myOwnerBean;

    /**
     * description：根据主键查询唯一数据
     * user 朱正磊
     * time 2019-06-16 17:06
     * @param id 主键
     * @return 返回唯一数据
     */
    @Override
    public User findUserById(Integer id) {
        return userMapper.findUserById(id);
    }

    /**
     * description：根据主键查询唯一数据
     * （该方法仅仅只是用来模拟如果没有查询到数据，返回的集合是null，还是不为null但是集合元素个数为0）
     * user 朱正磊
     * time 2019-06-16 17:06
     * @param userId 主键
     * @return 返回集合数据
     */
    @Override
    public List<User> findUserByUserId(Integer userId) {
        return userMapper.findUserByUserId(userId);
    }

    /**
     * description：获取我的配置文件属性内容信息
     * user 朱正磊
     * time 2019-06-16 22:06
     * @return 返回配置信息
     */
    @Override
    public String getMyowner() {
        return "username=" + myOwnerBean.getUsername() + ", password=" + myOwnerBean.getPassword();
    }

    /**
     * description：查询所有的用户信息并分页显示
     * user 朱正磊
     * time 2019-06-16 23:06
     * @param pageNum 开始页数
     * @param pageSize 每页显示的数据条数
     * @return 返回用户分页列表
     */
    @Override
    public List<User> findAll(Integer pageNum, Integer pageSize) {
        PageHelper.startPage(pageNum, pageSize);
        List<User> userList = userMapper.findAll();
        PageInfo<User> userPageInfo = new PageInfo<>(userList);
        userList = userPageInfo.getList();
        return userList;
    }

    /**
     * description：分页查询所有的用户信息
     * user 朱正磊
     * time 2019-06-16 23:06
     * @param pageNum 开始页数
     * @param pageSize 每页显示的数据条数
     * @return 返回用户分页列表
     */
    @Override
    public PageInfo<User> findAll2(Integer pageNum, Integer pageSize) {
        PageHelper.startPage(pageNum, pageSize);
        List<User> userList = userMapper.findAll();
        PageInfo<User> pageInfo = new PageInfo<>(userList);
        log.info("分页对象信息：{}", JsonTool.objectToJson(pageInfo));
        return pageInfo;
    }

    /**
     * description：仅仅测试@NonNull和@Nullable的使用
     * user 朱正磊
     * time 2019-08-24 19:31
     * @param username 用户名
     * @param password 密码
     * @return 返回测试内容
     */
    @Override
    public String testNonNull(@NonNull String username, @Nullable String password) {
        if (EmptyUtil.isEmpty(password)) {
            return "用户名：" + username;
        }
        System.out.println("【Service服务】用户名：" + username + "，密码：" + password);
        return "用户名：" + username + "，密码：" + password;
    }

    /**
     * description: 新增一条用户记录
     * @author 朱正磊
     * @date 2019-09-04 10:42:19
     * @param user 用户对象
     * @return 返回操作数据库状态
     */
    @Override
    public Integer addUser(User user) {
        return userMapper.insertSelective(user);
    }

}
